package xin.workflow.config;

import org.activiti.engine.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * <pre>
 * Activiti 八大服务配置
 * </pre>
 *
 * @author lixin_ma@outlook.com
 * @version 1.0
 * @since 2018/12/19
 */
@Configuration
public class ActivitiServiceProvider {

    /**
     * 1、流程仓库服务-管理流程仓库（流程定义和流程静态资源等），如：部署、删除、读取流程
     */
    @Bean
    public RepositoryService repositoryService(ProcessEngine processEngine){
        return processEngine.getRepositoryService();
    }

    /**
     * 2、运行时服务-处理所有正在处于运行时的流程实例、任务，包含流程实例，任务，变量，异步任务，等运行中的数据
     * 只在流程实例执行过程中保存这些数据， 在流程结束时就会删除这些记录
     */
    @Bean
    public RuntimeService runtimeService(ProcessEngine processEngine){
        return processEngine.getRuntimeService();
    }

    /**
     * 3、任务服务-管理和查询任务。如：签收、办理、指派等
     */
    @Bean
    public TaskService taskService(ProcessEngine processEngine){
        return processEngine.getTaskService();
    }

    /**
     * 4、历史服务-查询所有历史数据。如：流程实例、任务、活动、变量、附件等
     */
    @Bean
    public HistoryService historyService(ProcessEngine processEngine){
        return processEngine.getHistoryService();
    }

    /**
     * 5、表单服务-读取和流程、任务相关的表单数据
     */
    @Bean
    public FormService formService(ProcessEngine processEngine){
        return processEngine.getFormService();
    }

    /**
     * 6、身份服务-管理和查询用户、组之间的关系
     */
    @Bean
    public IdentityService identityService(ProcessEngine processEngine){
        return processEngine.getIdentityService();
    }

    /**
     * 7、引擎管理服务-和具体业务无关，主要用于查询流程引擎配置、数据库、作业等
     */
    @Bean
    public ManagementService managementService(ProcessEngine processEngine){
        return processEngine.getManagementService();
    }

    /**
     * 8、动态流程服务-新增的服务，用于动态修改流程中的一些参数信息等
     */
    @Bean
    public DynamicBpmnService dynamicBpmnService(ProcessEngine processEngine){
        return processEngine.getDynamicBpmnService();
    }
}
